포인터 연산과 인수 전달

✒️ 2025-04-03 13:15 내용 수정

수제비 2024 정보처리기사 필기 5판 1권의 내용을 정리
TCPSchool의 내용을 정리


포인터 연산

#include <stdio.h>

int main(void)
{
    char* p_c = 0;
    int* p_i = NULL;
    double* p_d = 0x00;

    // 부호 없는 16진 정수로 표기
    // # : 토큰을 문자열로 변환
    printf("p_c 주소값 : %#x\n", p_c);
    printf("p_i 주소값 : %#x\n", p_i);
    printf("p_d 주소값 : %#x\n", p_d);

    printf("p_c + 1 주소값 : %#x\n", ++p_c);
    printf("p_i + 1 주소값 : %#x\n", ++p_i);
    printf("p_d + 1 주소값 : %#x\n", ++p_d);

    return 0;
}
p_c 주소값 : 0
p_i 주소값 : 0  
p_d 주소값 : 0  
p_c + 1 주소값 : 0x1
p_i + 1 주소값 : 0x4
p_d + 1 주소값 : 0x8
#include <stdio.h>

int main(void)
{
    int num1 = 10;
    int num2 = 20;
    int* p_num1 = &num1;
    int* p_num2 = &num2;

    // 부호 없는 16진 정수로 표기
    // # : 토큰을 문자열로 변환

    printf("p_num1의 주소값 : %#x\n", p_num1);
    printf("p_num2의 주소값 : %#x\n", p_num2);
    printf("p_num1 == p_num2 결과 : %d\n\n", p_num1 == p_num2);

	// p_num1 포인터에 p_num2가 가리키는 주소값 대입
    p_num1 = p_num2;
    printf("p_num1의 주소값 : %#x\n", p_num1);
    printf("p_num2의 주소값 : %#x\n", p_num2);
    printf("대입 연산 후 p_num1 == p_num2 결과 : %d", p_num1 == p_num2);
    return 0;
}
p_num1의 주소값 : 0x5ffe74
p_num2의 주소값 : 0x5ffe70
p_num1 == p_num2 결과 : 0

p_num1의 주소값 : 0x5ffe70
p_num2의 주소값 : 0x5ffe70
대입 연산 후 p_num1 == p_num2 결과 : 1

인수 전달

1. 값에 의한 전달

#include <stdio.h>

void local(int num)
{
    num += 10;
}

int main(void)
{
    int var = 20;
    printf("var의 초기값 : %d\n", var);
    
    local(var);
    printf("함수 호출 후 var 값 : %d\n", var);
    
    return 0;
}
var의 초기값 : 20
함수 호출 후 var 값 : 20

2. 참조에 의한 전달

#include <stdio.h>

void local(int num)
{
    num += 10;
}

void pLocal(int* num)
{
    *num += 10;
}


int main(void)
{
    int var = 20;
    printf("var의 초기값 : %d\n", var);
    
    local(var);
    printf("local 함수 호출 후 var 값 : %d\n", var);

    pLocal(&var);
    printf("pLocal 함수 호출 후 var 값 : %d\n", var);

    return 0;
}
var의 초기값 : 20
local 함수 호출 후 var 값 : 20 
pLocal 함수 호출 후 var 값 : 30